// @Description
// @Author  xiaoyang
// @Date  2023/4/26 5:34 下午

package dto

import (
	"errors"
	"github.com/gin-gonic/gin"
	"golang-manage-admin/lib"
	"strconv"
)

// SendDelayedTaskForm 延时任务请求表单
// @Description 延时任务请求参数
type SendDelayedTaskForm struct {
	TaskId     string `json:"task_id" example:"abc123" comment:"任务唯一标识"`                                        // 任务唯一标识
	TaskName   string `json:"task_name" binding:"required" example:"测试任务" comment:"任务名称"`                       // 任务名称
	FromSystem string `json:"from_system" binding:"required" example:"test_system" comment:"来源系统"`              // 来源系统
	FromApi    string `json:"from_api" binding:"required" example:"/api/test" comment:"来源API"`                  // 来源API (系统哪个API触发)
	Expires    string `json:"expires" binding:"required" example:"10000" comment:"延时时间(毫秒)"`                    // 延时时间 (备注)
	Detail     string `json:"detail" binding:"required" example:"任务详情描述" comment:"详情"`                          // 详情备注
	Data       string `json:"data" binding:"required" example:"{\"url\":\"http://example.com\"}" comment:"内容体"` // 详情备注
}

func (sdtf *SendDelayedTaskForm) BindValidParam(c *gin.Context) error {
	// 数据绑定 + 常规数据校验
	if err := lib.DefaultGetValidParams(c, sdtf); err != nil {
		return err
	}
	// 数据校验(特殊校验)
	return sdtf.CheckParam()
}

func (sdtf *SendDelayedTaskForm) CheckParam() error {
	if expires, err := strconv.Atoi(sdtf.Expires); err != nil || expires <= 0 {
		return errors.New("延时时间非法")
	}
	return nil
}
